package ar.edu.utn.frgp.banco.service.impl;

import java.math.BigDecimal;

import ar.edu.utn.frgp.banco.dao.CuentaDao;
import ar.edu.utn.frgp.banco.dao.PagoPrestamosDao;
import ar.edu.utn.frgp.banco.dao.PrestamoDao;
import ar.edu.utn.frgp.banco.dao.impl.CuentasDaoImpl;
import ar.edu.utn.frgp.banco.dao.impl.PagoPrestamosDaoImpl;
import ar.edu.utn.frgp.banco.dao.impl.PrestamoDaoImpl;
import ar.edu.utn.frgp.banco.domain.Cuenta;
import ar.edu.utn.frgp.banco.domain.PagoPrestamos;
import ar.edu.utn.frgp.banco.domain.Prestamo;
import ar.edu.utn.frgp.banco.exceptions.PersonalisedException;
import ar.edu.utn.frgp.banco.exceptions.ServiceException;
import ar.edu.utn.frgp.banco.service.PagoPrestamosService;
import ar.edu.utn.frgp.banco.utils.Constantes;

public class PagoPrestamosServiceImpl implements PagoPrestamosService {

	CuentaDao cuentaDAO;
	Prestamo prestamo;
	PrestamoDao prestamoDAO;
	PagoPrestamosDao pagoPrestamoDAO;
	
	public Boolean pagarCuota(PagoPrestamos pagoPrestamo, BigDecimal monto) throws PersonalisedException{
		prestamo = new Prestamo();
		prestamoDAO = new PrestamoDaoImpl();
		pagoPrestamoDAO = new PagoPrestamosDaoImpl();
		cuentaDAO = new CuentasDaoImpl();
		
		prestamo = prestamoDAO.obtenerPrestamo(pagoPrestamo.getDni());
		
		Cuenta c = cuentaDAO.obtenerCuenta(pagoPrestamo.getNroCuenta());
		
		if (c.getSaldo().doubleValue() + c.getDescubierto().doubleValue() - monto.doubleValue() < 0){
			throw new ServiceException(Constantes.OPERACION_SALDO_INSUFICIENTE);
		}
		
		if(prestamoDAO.obtenerNumCuotas(pagoPrestamo.getId()) == prestamo.getCantidadCuotas())
			pagoPrestamoDAO.realizarPagoFinal(pagoPrestamo.getId(), pagoPrestamo.getFecha(), pagoPrestamo.getNroCuenta(), monto);
		
		if(prestamoDAO.obtenerNumCuotas(pagoPrestamo.getId()) != prestamo.getCantidadCuotas())
			pagoPrestamoDAO.realizarPago(pagoPrestamo.getId(), pagoPrestamo.getFecha(), pagoPrestamo.getNroCuenta(), monto);
		
		
		return true;
	}
	
	public Boolean pagarCuotaEfectivo(PagoPrestamos pagoPrestamo, BigDecimal monto) throws PersonalisedException{
		Prestamo pres = new Prestamo();
		PrestamoDao prestamoDAO = new PrestamoDaoImpl();
		PagoPrestamosDao pagoPrestamoDAO = new PagoPrestamosDaoImpl();
		
		pres = prestamoDAO.obtenerPrestamo(pagoPrestamo.getDni());
		
		if(prestamoDAO.obtenerNumCuotas(pagoPrestamo.getId()) == pres.getCantidadCuotas())
			pagoPrestamoDAO.realizarPagoEfectivo(pagoPrestamo.getId(), pagoPrestamo.getFecha(), monto);
		
		if(prestamoDAO.obtenerNumCuotas(pagoPrestamo.getId()) != pres.getCantidadCuotas())
			pagoPrestamoDAO.realizarPagoEfectivoFinal(pagoPrestamo.getId(), pagoPrestamo.getFecha(), monto);
		
		
		return true;
		
	}
}

